Videocompressie uitgelegd

 
 

- Waarom worden (video)files gecompresseerd

- Lossless / lossy compressie

- inter/intra compressie

- containers vs. codecs

 

 

 



 
 

Waarom worden (video)files gecompresseerd

Om een lang en technisch verhaal kort te houden : omdat niet gecompresseerde videofiles te groot worden. Dat geeft problemen bij opslag en (data)transport.
Vergelijk het met de ochtendfiles : vijftig mensen moeten van Gent naar Brussel. Elk neemt zijn eigen wagen, en staat uiteraard in de file, en er moet parkeerruimte gezocht worden voor vijftig auto's.
Stel dat we die mensenstroom "compresseren"; we zetten in elke auto vijf mensen, resultaat : 10 auto's op de baan en geen 50, en slechts 10 i.p.v. 50 parkeerplaatsen te zoeken.

Net zoals in het autovoorbeeld het comfort wordt opgegeven ten voordele van de snelheid, zal bij video compressie de kwaliteit omgekeerd evenredig zijn aan de compressie, m.a.w. hoe hoger de compressie, hoe lager de kwaliteit als we tenminste geen rekenng houden met de kwaliteit en het doel van de compressor, zo kan je bv. Apple ProRes niet vergelijken met H.264, omdat beide systemen een totaal ander principe hanteren, en ook voor totaal verschillende doelen gebruikt worden).

Hieronder een rekenvoorbeeldje

 

 
 
formaat : 1920 x 1080 = 2073600 Pixels
per RGB kleur x 3 = 6220800
bits per kleur x 8 = 49766400 bits
/1024 = 48600 Kb
/1024 = 47,4 Mb
/8 = 5,93 MB
x 25 fr/sec = 148,3 MB/sec
x 60 sec/min = 8898,92 MB/min
8,69 GB/min

Om één minuut beeldmateriaal op te slaan zou je dus een kleine 9 gigabyte opslagruimte moeten hebben.
Vergelijk dat even met de reële waarden van diverse gecompresseerde formaten hier

 
 

 

Lossless / lossy compressie

De meeste mensen zullen wel vertrouwd zijn met RAR en/of ZIP files. Dat zijn twee voorbeelden van lossless compressie. M;a.w. de data wordt gecompresseerd zonder dat de kwaliteiit gecompromiteerd wordt. De originele file en de gezipte/unzipte file zijn bit voor bit identiek. O.a. omdat deze operatie zeer CPU-intensief en dus relatief traag is, wordt dze vorm van compressie nagenoeg niet toegepast voor video.

 

Foto, uncompressed : 376 KB Dezelfde foto, gezipt : 276 KB, vervolgens terug ontzipped Weer dezelfde foto, gecompresserrd tot JPEG in hoge kwaliteit: 172 KB Weer dezelfde foto, gecompresserrd tot JPEG in lage kwaliteit: 120 KB
       
       
       

 

inter/intra compressie

De twee laatste foto's (JPEG compressie) zijn voorbeelden van intra-frame compressie, alle video codecs maken daar in een of andere vorm gebruik van. Om beter te begrijpen hoe dat soort compressie in zij werk gaat gebruik ik even een "taal" voorbeeld.

 

 

probeer de zinnen hieronder te reconstrueren, maak daarbij gebruik van een aantal regels die van tevoren zijn vastgelegd, namelijk

 
 
    1. de taal is Nederlands
    2. de grammatica is Nederlands
    3. de woorden worden van mekaar gescheiden door een underscore
    4. elke lijn is een nieuwe zin
    5. als een lijn begint met + wordt de vorige lijn herhaald en de woorden na + toegevoegd (met inachtname van regels 1 en 2)
 
 




 
 

 

d_koe_stt_in_d_wei
+bruine
+groene
+t_grzen
     
           
 

Deze regels kunnen we zien als de codec (= samentrekking van CODing en DECoding): een set van afspraken die gemaakt zijn i.v.m. de gebruikte manier van coderen, zodat we diezelfde regels kunnen toepassen bij het decoderen. Net zoals je hier een aantal andere regels kan gebruiken (bv. de taal is engels, we laten alle klinkers weg, spaties worden weggelaten, ...) zullen we ook in video-compressie verschillende codecs tegenkomen (MPEG-1, MPEG-2, H.264, DivX, DV-pal, ....) waarbij de ene codec al efficiënter zal zijn dan de andere.
Het mag duidelijk zijn dat we niet kunnen decoderen als we niet over de juiste codec beschikken. Stel dat we ons niet bewust zijn van regel één : " de taal is nederlands", dan zal het nagenoeg onmogelijk zijn om bovenstaande informatie te interpreteren.

     
           
   

met een beetje geluk heb je gevonden :

de koe staat in de wei
de bruine koe staat in de wei
de bruine koe staat in de groene wei
de bruine koe staat in de groene wei te grazen

   

 

Wat heeft die koe in de wei nu met videocompressie te maken ?

Als we een reeks video (of film) frames bekijken stellen we twee dingen vast :


1) binnen één frame zijn een groot deel van de pixels "voorspelbaar", nl. hetzelfde als de hun omringende pixels, of als de omringende pixels bekend zijn door middel van een reeks algoritmes (afspraken, maar in dit geval mathematische) te berekenen of te voorspellen.

2) Van het ene frame naar het volgende blijft een heel deel van de informatie hetzelfde , slechts een klein deel van de beeldinhoud zal ook effectief veranderd zijn, en ook de beweging is vaak voorspelbaar.

een voorbeeld uit de echte wereld hier

vergelijken we dat met onze koe :

d_koe_stt_in_d_wei

door de gemaakte afspraken (codec) weten we hoe de tekst gecodeerd is, en kunnen we hem ook decoderen. Meteen zie je ook dat deze "codec" ruimte laat voor foute interpretaties :

de koe staat in de wei / die koe staat in de wei / die koe staat in die wei

De essentie staat er, maar details gaan mogelijk verloren. Ook hier gaat de vergelijking met de video-codec op. Hoe meer informatie wordt "weggelaten" hoe groter het kwaliteitsverlies bij codering/decodering.

Beschouwen we vier zinnen als vier mekaar opvolgende frames, waar telkens een deel van de informatie verandert, maar de rest onveranderd blijft, dan komen we tot:

de koe staat in de wei
de bruine koe staat in de wei
de bruine koe staat in de groene wei
de bruine koe staat in de groene wei te grazen

Nu zou het kunnen dat er een groene koe in de bruine wei staat (kunstenaar aan het werk) , met onze codec valt dat niet te ontcijferen want we gaan er van uit dat een groene koe niet bestaat.

Onze codec is dus ontoereikend voor sommige, heel specifieke situaties, maar in het overgrote deel van de mogelijkheden wel juist.
Ook hier zien we dus weer dat de kwaliteit van de codec bepalend is voor het eindresultaatL

Laten we nu onze winst uittellen :

als we alle letters (inclusief spaties) in de originele versie optellen komen we voor de vier zinnen tot :

 

 

de koe staat in de wei
de bruine koe staat in de wei
de bruine koe staat in de groene wei
de bruine koe staat in de groene wei te grazen

totaal :

22
29
36
46

133

hierboven dus het tekst equivalent voor een "uncompressed" file. Alle informatie wordt onbewerkt opgeslagen.


hieronder dezelfde tekst, gebruik makend van "intra-frame compression" (een video equivalent daarvan zou DV-pal of Apple ProRes zijn). Per zin proberen we zoveel mogelijk "overbodige" informatie weg te halen, evenwel zonder dat we het risico lopen dat de zin achteraf niet, of slecht gedecodeerd zou worden.
In video, elk frame wordt als zelfstandige "foto" gecompresseerd.

d_koe_stt_in_d_wei
d_bruin_koe_stt_in_d_wei
d_bruin_koe_stt_in_d_groen_wei
d_bruin_koe_stt_in_d_groen_wei_t_grzen

totaal :

18
24
30
38

110

En nogmaals dezelfde tekst, maar ditmaal gebruik makend van "inter-frame compression" (een video equivalent daarvan zou HDV , AVCHD of H.264 zijn). Idem zoals hierboven, maar bovendien beschrijven we per zin alleen die elementen die veranderd zijn t.o.v. de vorige zin.
In video : een reeks frames wordt opgedeeld in GOP's (Group Of Pictures). In die GOP heb je een i-frame : een frame dat volledig beschreven wordt, en P en B frames : frames waarin de veranderingn t.o.v. het i-fame beschreven worden. Een meer gedetaileerde en juistere uitleg hier.

d_koe_stt_in_d_wei
+bruin
+groen
+t_grzen

totaal :

18
6
6
8

38

 

 

 

Dit is ook het moment om een veel voorkomend misverstand uit de wereld te helpen.

Je hebt codecs (DV, MPEG2,MPEG4, AVC, AVCHD, Apple ProRes, H.264, ....) en je hebt containers (Flash Video, QuickTime, Real Media, Windows Media, ...). Een container kan verschillende, maar niet noodzakelijk alle codecs bevatten en bepaalde codecs kunnnen in verschillende containers verpakt worden. Het belangrijkste wat je hieruit moet onthouden is het volgende : converteren van één codec naar een andere betekent dat de video gedecodeerd moet worden, en terug gecodeerd met een andere codec. Bij het veranderen van container (bv. van .mov naar .mxf) blijft je videomateriaal onveranderd, maar wordt het gewoon in een andere verpakking gestoken.

meer